package com.innovations.inn.service;

import com.innovations.inn.domain.BusinessDemand;
import com.innovations.inn.domain.request.RequestBusinessDemand;
import com.innovations.inn.domain.request.RequestListFilterPreview;
import com.innovations.inn.domain.request.RequestListPreview;
import com.innovations.inn.domain.response.ResponseBusinessDemand;
import com.innovations.inn.domain.response.ResponseBusinessDemandList;
import com.innovations.inn.domain.response.ResponseBusinessFilterDemand;
import com.innovations.inn.domain.response.ResponseItemCount;
import java.util.List;

/**
 * 商业需求Service接口
 *
 * @author dp
 * @date 2024-08-23
 */
public interface IBusinessDemandService {
    /**
     * 查询商业需求
     *
     * @param businessDemandId 商业需求主键
     * @return 商业需求
     */
    public ResponseBusinessDemand selectBusinessDemandByBusinessDemandId(Long businessDemandId);

    /**
     * 查询商业需求列表
     *
     * @param businessDemand 商业需求
     * @return 商业需求集合
     */
    List<ResponseBusinessDemandList> selectBusinessDemandList(BusinessDemand businessDemand);

    /**
     * 查询商业需求合计
     *
     * @param businessDemand 商业需求
     * @return 商业需求合计
     */
    List<ResponseItemCount> selectBusinessDemandCount(BusinessDemand businessDemand);

    /**
     * 查询商业需求列表-预览展示
     *
     * @param businessDemand 商业需求
     * @return 商业需求集合
     */
    List<BusinessDemand> selectBusinessDemandPreview(RequestListPreview businessDemand);

    /**
     * 查询商业需求列表-预览展示-过滤
     *
     * @param requestListPreview 科研成果列表预览入参
     * @return 科研成果集合
     */
    List<ResponseBusinessFilterDemand> selectBusinessDemandFilterPreview(RequestListFilterPreview requestListPreview);

    /**
     * 新增商业需求
     *
     * @param businessDemand 商业需求
     * @return 结果
     */
    int insertBusinessDemand(RequestBusinessDemand businessDemand);

    /**
     * 修改商业需求
     *
     * @param businessDemand 商业需求
     * @return 结果
     */
    int updateBusinessDemand(RequestBusinessDemand businessDemand);

    /**
     * 批量删除商业需求
     *
     * @param businessDemandIds 需要删除的商业需求主键集合
     * @return 结果
     */
    int deleteBusinessDemandByBusinessDemandIds(Long[] businessDemandIds);

    /**
     * 删除商业需求信息
     *
     * @param businessDemandId 商业需求主键
     * @return 结果
     */
    int deleteBusinessDemandByBusinessDemandId(Long businessDemandId);

    /**
     * 实体数据补全
     *
     * @param businessDemand 实体
     * @param userId         用户id
     * @param crateType      创建类型 1：新增 2：修改
     */
    void completeData(RequestBusinessDemand businessDemand, Long userId, Integer crateType);
}
